package devcamp.team.connection;

import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.util.Log;
import devcamp.team.R;
import devcamp.team.util.DialogUtils;
import devcamp.team.util.PreferenceUtils;

/**
 * サーバと非同期で通信をして、ユーザー名とTwitterIDを登録するクラス.
 * @author kkato
 *
 */
public class RegistrationAsyncTask extends AsyncTask<Void, Void, Long> {
    /**
     * ログ出力用のタグ.
     */
    private static final String TAG = "RegistrationAsyncTask";
    /**
     * コンテキスト.
     */
    private Activity mActivity;
    /**
     * 登録するユーザー名.
     */
    private String mUserName;
    /**
     * 登録するTwitterID.
     */
    private String mTwitterId;

    /**
     * プログレスダイアログ.
     */
    private ProgressDialog progressDialog;


    /**
     * コンストラクタ.
     * @param activity アクティビティ
     * @param userName ユーザー名
     * @param twitterId TwitterID
     */
    public RegistrationAsyncTask(Activity activity, String userName, String twitterId) {
        mActivity = activity;
        mUserName = userName;
        mTwitterId = twitterId;
        progressDialog = DialogUtils.SpinnerProgressDialog(activity, mActivity.getResources().getString(R.string.dialog_registration_titile), mActivity.getResources().getString(R.string.dialog_registration_message));
    }

    @Override
    protected void onPreExecute() {
        // プログレスダイアログを表示
        progressDialog.show();
    }

    @Override
    protected Long doInBackground(Void... params) {
        // サーバと通信して登録をする
        long id = ServerConnectionModel.registration(mUserName, mTwitterId);
        return id;
    }

    @Override
    protected void onPostExecute(Long param) {
        // プログレスダイアログを閉じる
        progressDialog.dismiss();
        // 登録内容を保存
        Log.d(TAG, "ServerConnectionModel.registration : " + param);
        if (param == -1) {
            DialogUtils.AlertDialog(mActivity, mActivity.getResources().getString(R.string.dialog_error_registration_titile), mActivity.getResources().getString(R.string.dialog_error_registration_error)).show();
        } else {
            saveUserData(param);
            DialogUtils.messageDialog(mActivity, mActivity.getResources().getString(R.string.dialog_registration_success)).show();
        }
    }

    /**
     * ユーザーデータを保存する.
     * @param param ユニークID
     */
    void saveUserData(Long id) {
        PreferenceUtils preference = new PreferenceUtils(mActivity);
        preference.setNickName(mUserName);
        preference.setTwitterId(mTwitterId);
        preference.setUniqueId(id);
    }
}
